home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 22
/
Cream of the Crop 22.iso
/
program
/
inter52g.zip
/
INT2GUID.ZIP
/
INT2GUID.TAB
< prev
next >
Wrap
Text File
|
1993-11-14
|
34KB
|
783 lines
;Text for INT2GUID conversion program, topic 21.
;INT2GUID converts INTERRUP.LST files to input for GUIDE.
;
;NB! When updating, remember to update the release number in the next
;paragraph, and in the beginning the text.
;
;This file contains tables extracted from the INTERRUP.LST file release 37.
;Tabs in the extracted text were filtered to 1 - 8 spaces.
;
;This file includes 4 extra topics. Reserve additionally 6 topics, or a
;total of 10.
;
;Topic headings are included in the GUIDE main index unless the configuration
;file specifies mask 0x8000.
;
PSP Format, Environment Block, Country Specific Information, Error List
This entry gives access to tables extracted from the INTERRUP.LST file,
release 37.
22PSP + Env. Program Segment Prefix Format + Environment
23Country Specific Information
24Errors Returned by DOS Funtion Calls
25EXE *.EXE File Header etc.
;
!TOPIC 22 PSP Format
!! 0x8000
!NOINDEX
!! 0
;
--------D-2126-------------------------------
INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
AH = 26h
DX = segment at which to create PSP (see below)
Notes: new PSP is updated with memory size information; INTs 22h, 23h, 24h
taken from interrupt vector table; the parent PSP field is set to 0
(DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
copy
SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
Format of PSP:
Offset Size Description
00h 2 BYTEs INT 20 instruction for CP/M CALL 0 program termination
the CDh 20h here is often used as a signature for a valid PSP
02h WORD segment of first byte beyond memory allocated to program
04h BYTE unused filler
05h BYTE CP/M CALL 5 service request (FAR JMP to 000C0h)
BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
06h WORD CP/M compatibility--size of first segment for .COM files
08h 2 BYTEs remainder of FAR JMP at 05h
0Ah DWORD stored INT 22 termination address
0Eh DWORD stored INT 23 control-Break handler address
12h DWORD DOS 1.1+ stored INT 24 critical error handler address
16h WORD segment of parent PSP
18h 20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed
2Ch WORD DOS 2+ segment of environment for process
2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call
32h WORD DOS 3+ number of entries in JFT (default 20)
34h DWORD DOS 3+ pointer to JFT (default PSP:0018h)
38h DWORD DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
used by SHARE in DOS 3.3
3Ch BYTE apparently unused by DOS versions <= 6.00
3Dh BYTE apparently used by some versions of APPEND
3Eh BYTE (Novell NetWare) flag: next byte initialized if CEh
3Fh BYTE (Novell Netware) Novell task number if previous byte is CEh
40h 2 BYTEs DOS 5+ version to return on INT 21/AH=30h
42h WORD (MSWin3) selector of next PSP (PDB) in linked list
Windows keeps a linked list of Windows programs only
44h 4 BYTEs unused by DOS versions <= 6.00
48h BYTE (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
49h 7 BYTEs unused by DOS versions <= 6.00
50h 3 BYTEs DOS 2+ service request (INT 21/RETF instructions)
53h 2 BYTEs unused in DOS versions <= 6.00
55h 7 BYTEs unused in DOS versions <= 6.00; can be used to make first FCB
into an extended FCB
5Ch 16 BYTEs first default FCB, filled in from first commandline argument
overwrites second FCB if opened
6Ch 16 BYTEs second default FCB, filled in from second commandline argument
overwrites beginning of commandline if opened
7Ch 4 BYTEs unused
80h 128 BYTEs commandline / default DTA
command tail is BYTE for length of tail, N BYTEs for the tail,
followed by a BYTE containing 0Dh
Notes: in DOS v3+, the limit on simultaneously open files may be increased by
allocating memory for a new open file table, filling it with FFh,
copying the first 20 bytes from the default table, and adjusting the
pointer and count at 34h and 32h. However, DOS will only copy the
first 20 file handles into a child PSP (including the one created on
EXEC).
network redirectors based on the original MS-Net implementation use
values of 80h-FEh in the open file table to indicate remote files;
Novell NetWare reportedly also uses values of 80h-FEh
MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
high; the first FCB is empty and the second contains the first
parameter
some DOS extenders place protected-mode values in various PSP fields
such as the "parent" field, which can confuse PSP walkers. Always
check either for the CDh 20h signature or that the suspected PSP is
at the beginning of a memory block which owns itself (the preceding
paragraph should be a valid MCB with "owner" the same as the
suspected PSP).
Novell NetWare updates the fields at offsets 3Eh and 3Fh without
checking that a legal PSP segment is current; see AH=50h for further
discussion
Format of environment block:
Offset Size Description
00h N BYTEs first environment variable, ASCIZ string of form "var=value"
N BYTEs second environment variable, ASCIZ string
...
N BYTEs last environment variable, ASCIZ string of form "var=value"
BYTE 00h
---DOS 3+---
WORD number of strings following environment (normally 1)
N BYTEs ASCIZ full pathname of program owning this environment
other strings may follow
;
!TOPIC 23 Country Info
!! 0x8000
!NOINDEX
!! 0
;
--------D-2138-------------------------------
INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
AH = 38h
--DOS 2.x--
AL = 00h get current-country info
DS:DX -> buffer for returned info (see below)
Return: CF set on error
AX = error code (02h)
CF clear if successful
AX = country code (MS-DOS 2.11 only)
buffer at DS:DX filled
--DOS 3+--
AL = 00h for current country
AL = 01h thru 0FEh for specific country with code <255
AL = 0FFh for specific country with code >= 255
BX = 16-bit country code
DS:DX -> buffer for returned info (see below)
Return: CF set on error
AX = error code (02h)
CF clear if successful
BX = country code
DS:DX buffer filled
Note: this function is not supported by the Borland DPMI host, but no error
is returned; as a workaround, one should allocate a buffer in
conventional memory with INT 31/AX=0100h and simulate an INT 21 with
INT 31/AX=0300h
SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
Format of PC-DOS 2.x country info:
Offset Size Description
00h WORD date format 0 = USA mm dd yy
1 = Europe dd mm yy
2 = Japan yy mm dd
02h BYTE currency symbol
03h BYTE 00h
04h BYTE thousands separator char
05h BYTE 00h
06h BYTE decimal separator char
07h BYTE 00h
08h 24 BYTEs reserved
Format of MS-DOS 2.x,DOS 3+ country info:
Offset Size Description
00h WORD date format (see above)
02h 5 BYTEs ASCIZ currency symbol string
07h 2 BYTEs ASCIZ thousands separator
09h 2 BYTEs ASCIZ decimal separator
0Bh 2 BYTEs ASCIZ date separator
0Dh 2 BYTEs ASCIZ time separator
0Fh BYTE currency format
bit 2 = set if currency symbol replaces decimal point
bit 1 = number of spaces between value and currency symbol
bit 0 = 0 if currency symbol precedes value
1 if currency symbol follows value
10h BYTE number of digits after decimal in currency
11h BYTE time format
bit 0 = 0 if 12-hour clock
1 if 24-hour clock
12h DWORD address of case map routine
(FAR CALL, AL = character to map to upper case [>= 80h])
16h 2 BYTEs ASCIZ data-list separator
18h 10 BYTEs reserved
Values for country code:
1 001h United States
2 002h Canadian-French
3 003h Latin America
31 01Fh Netherlands
32 020h Belgium
33 021h France
34 022h Spain
36 024h Hungary (not supported by DR-DOS 5.0)
38 026h Yugoslavia (not supported by DR-DOS 5.0)
39 027h Italy
41 029h Switzerland
42 02Ah Czechoslovakia/Tjekia (not supported by DR-DOS 5.0)
43 02Bh Austria (DR-DOS 5.0)
44 02Ch United Kingdom
45 02Dh Denmark
46 02Eh Sweden
47 02Fh Norway
48 030h Poland (not supported by DR-DOS 5.0)
49 031h Germany
55 037h Brazil (not supported by DR-DOS 5.0)
61 03Dh International English [Australia in DR-DOS 5.0]
81 051h Japan (DR-DOS 5.0, MS-DOS 5.0+)
82 052h Korea (DR-DOS 5.0)
86 056h China (MS-DOS 5.0+)
88 058h Taiwan (MS-DOS 5.0+)
90 05Ah Turkey (MS-DOS 5.0+)
351 15Fh Portugal
354 162h Iceland
358 166h Finland
785 311h Middle East/Saudi Arabia (DR-DOS 5.0,MS-DOS 5.0+)
972 3CCh Israel (DR-DOS 5.0,MS-DOS 5.0+)
--------D-2138--DXFFFF-----------------------
INT 21 - DOS 3+ - SET COUNTRY CODE
AH = 38h
DX = FFFFh
AL = 01h thru FEh for specific country with code <255
AL = FFh for specific country with code >= 255
BX = 16-bit country code (see AH=38h)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
Note: not supported by OS/2
SeeAlso: INT 2F/AX=1403h
--------D-2165-------------------------------
INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
AH = 65h
AL = info ID
01h get general internationalization info
02h get pointer to uppercase table
04h get pointer to filename uppercase table
05h get pointer to filename terminator table
06h get pointer to collating sequence table
07h (DOS 4+) get pointer to Double-Byte Character Set table
BX = code page (FFFFh=global code page)
DX = country ID (FFFFh=current country)
ES:DI -> country information buffer (see below)
CX = size of buffer (>= 5)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
CX = size of country information returned
ES:DI -> country information
Notes: AL=05h appears to return same info for all countries and codepages; it
has been documented for DOS 5+, but was undocumented in ealier
versions
NLSFUNC must be installed to get info for countries other than the
default
subfunctions 02h and 04h are identical under OS/2
SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
Format of country information:
Offset Size Description
00h BYTE info ID
---if info ID = 01h---
01h WORD size
03h WORD country ID
05h WORD code page
07h 34 BYTEs country-dependent info (see AH=38h)
---if info ID = 02h---
01h DWORD pointer to uppercase table (see below)
---if info ID = 04h---
01h DWORD pointer to filename uppercase table (see below)
---if info ID = 05h---
01h DWORD pointer to filename character table (see below)
---if info ID = 06h---
01h DWORD pointer to collating table (see below)
---if info ID = 07h (DOS 4+)---
01h DWORD pointer to DBCS lead byte table (see below)
Format of uppercase table:
Offset Size Description
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of collating table:
Offset Size Description
00h WORD table size
02h 256 BYTEs values used to sort characters 00h to FFh
Format of filename terminator table:
Offset Size Description
00h WORD table size (not counting this word)
02h BYTE ??? (01h for MS-DOS 3.30-6.00)
03h BYTE lowest permissible character value for filename
04h BYTE highest permissible character value for filename
05h BYTE ??? (00h for MS-DOS 3.30-6.00)
06h BYTE first excluded character in range \ all characters in this
07h BYTE last excluded character in range / range are illegal
08h BYTE ??? (02h for MS-DOS 3.30-6.00)
09h BYTE number of illegal (terminator) characters
0Ah N BYTEs characters which terminate a filename: ."/\[]:|<>+=;,
Note: partially documented for DOS 5+, but undocumented for earlier versions
Format of filename uppercase table:
Offset Size Description
00h WORD table size
02h 128 BYTEs uppercase equivalents (if any) of chars 80h to FFh
Format of DBCS lead byte table:
Offset Size Description
00h WORD length
02h 2N BYTEs start/end for N lead byte ranges
WORD 0000h (end of table)
--------D-2165-------------------------------
INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
AH = 65h
AL = function
20h capitalize character
DL = character to capitalize
Return: DL = capitalized character
21h capitalize string
DS:DX -> string to capitalize
CX = length of string
22h capitalize ASCIZ string
DS:DX -> ASCIZ string to capitalize
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
Note: these calls have been documented for DOS 5+, but were undocumented in
DOS 4.x.
--------D-216523-----------------------------
INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
AX = 6523h
DL = character
DH = second character of double-byte character (if applicable)
Return: CF set on error
CF clear if successful
AX = type
00h no
01h yes
02h neither yes nor no
--------D-2165-------------------------------
INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
AH = 65h
AL = function
A0h capitalize filename character
DL = character to capitalize
Return: DL = capitalized character
A1h capitalize counted filename string
DS:DX -> filename string to capitalize
CX = length of string
A2h capitalize ASCIZ filename
DS:DX -> ASCIZ filename to capitalize
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
Note: nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
pointer depending on the high bit of AL, but doesn't clear the
bit before branching by function number).
--------D-216601-----------------------------
INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
AX = 6601h
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
BX = active code page (see AX=6602h)
DX = system code page
SeeAlso: AX=6602h
--------D-216602-----------------------------
INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
AX = 6602h
BX = active code page (see below)
DX = system code page (active page at boot time)
Return: CF set on error
AX = error code (see AH=59h)
CF clear if successful
SeeAlso: AX=6601h,INT 2F/AX=14FFh
Values for code page:
437 US
850 Multilingual
852 Slavic/Latin II (DOS 5+)
857 Turkish
860 Portugal
861 Iceland
863 Canada (French)
865 Norway/Denmark
;
!TOPIC 24 Error Codes
!! 0x8000
!NOINDEX
!! 0
;
--------D-2159--BX0000-----------------------
INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
AH = 59h
BX = 0000h
Return: AX = extended error code (see below)
BH = error class (see below)
BL = recommended action (see below)
CH = error locus (see below)
ES:DI may be pointer (see error code list below)
CL, DX, SI, BP, and DS destroyed
Notes: functions available under DOS 2.x map the true DOS 3+ error code into
one supported under DOS 2.x
you should call this function to retrieve the true error code when an
FCB or DOS 2.x call returns an error
under DR-DOS 5.0, this function does not use any of the DOS-internal
stacks and may thus be called at any time
SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
Values for extended error code:
00h (0) no error
01h (1) function number invalid
02h (2) file not found
03h (3) path not found
04h (4) too many open files (no handles available)
05h (5) access denied
06h (6) invalid handle
07h (7) memory control block destroyed
08h (8) insufficient memory
09h (9) memory block address invalid
0Ah (10) environment invalid (usually >32K in length)
0Bh (11) format invalid
0Ch (12) access code invalid
0Dh (13) data invalid
0Eh (14) reserved
0Fh (15) invalid drive
10h (16) attempted to remove current directory
11h (17) not same device
12h (18) no more files
---DOS 3+---
13h (19) disk write-protected
14h (20) unknown unit
15h (21) drive not ready
16h (22) unknown command
17h (23) data error (CRC)
18h (24) bad request structure length
19h (25) seek error
1Ah (26) unknown media type (non-DOS disk)
1Bh (27) sector not found
1Ch (28) printer out of paper
1Dh (29) write fault
1Eh (30) read fault
1Fh (31) general failure
20h (32) sharing violation
21h (33) lock violation
22h (34) disk change invalid
ES:DI -> ASCIZ volume label of required disk
23h (35) FCB unavailable
24h (36) sharing buffer overflow
25h (37) (DOS 4+) code page mismatch
26h (38) (DOS 4+) cannot complete file operation (out of input)
27h (39) (DOS 4+) insufficient disk space
28h-31h reserved
32h (50) network request not supported
33h (51) remote computer not listening
34h (52) duplicate name on network
35h (53) network name not found
36h (54) network busy
37h (55) network device no longer exists
38h (56) network BIOS command limit exceeded
39h (57) network adapter hardware error
3Ah (58) incorrect response from network
3Bh (59) unexpected network error
3Ch (60) incompatible remote adapter
3Dh (61) print queue full
3Eh (62) queue not full
3Fh (63) not enough space to print file
40h (64) network name was deleted
41h (65) network: Access denied
42h (66) network device type incorrect
43h (67) network name not found
44h (68) network name limit exceeded
45h (69) network BIOS session limit exceeded
46h (70) temporarily paused
47h (71) network request not accepted
48h (72) network print/disk redirection paused
49h (73) network software not installed
(LANtastic) invalid network version
4Ah (74) unexpected adapter close
(LANtastic) account expired
4Bh (75) (LANtastic) password expired
4Ch (76) (LANtastic) login attempt invalid at this time
4Dh (77) (LANtastic v3+) disk limit exceeded on network node
4Eh (78) (LANtastic v3+) not logged in to network node
4Fh (79) reserved
50h (80) file exists
51h (81) reserved
52h (82) cannot make directory
53h (83) fail on INT 24h
54h (84) (DOS 3.3+) too many redirections
55h (85) (DOS 3.3+) duplicate redirection
56h (86) (DOS 3.3+) invalid password
57h (87) (DOS 3.3+) invalid parameter
58h (88) (DOS 3.3+) network write fault
59h (89) (DOS 4+) function not supported on network
5Ah (90) (DOS 4+) required system component not installed
64h (100) (MSCDEX) unknown error
65h (101) (MSCDEX) not ready
66h (102) (MSCDEX) EMS memory no longer valid
67h (103) (MSCDEX) not High Sierra or ISO-9660 format
68h (104) (MSCDEX) door open
Values for Error Class:
1 01h out of resource (storage space or I/O channels)
2 02h temporary situation (file or record lock)
3 03h authorization (denied access)
4 04h internal (system software bug)
5 05h hardware failure
6 06h system failure (configuration file missing or incorrect)
7 07h application program error
8 08h not found
9 09h bad format
10 0Ah locked
11 0Bh media error
12 0Ch already exists
13 0Dh unknown
Values for Suggested Action:
1 01h retry
2 02h delayed retry
3 03h prompt user to reenter input
4 04h abort after cleanup
5 05h immediate abort
6 06h ignore
7 07h retry after user intervention
Values for Error Locus:
1 01h unknown or not appropriate
2 02h block device (disk error)
3 03h network related
4 04h serial device (timeout)
5 05h memory related
;
!TOPIC 25 EXE Header etc
!! 0x8000
!NOINDEX
!! 0
;
--------D-214B-------------------------------
INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
AH = 4Bh
AL = type of load
00h load and execute
01h load but do not execute
03h load overlay
04h load and execute in background (European MS-DOS 4.0 only)
"Exec & Go" (see also AH=80h)
DS:DX -> ASCIZ program name (must include extension)
ES:BX -> parameter block (see below)
CX = mode (subfunction 04h only)
0000h child placed in zombie mode after termination
0001h child's return code discarded on termination
Return: CF clear if successful
BX,DX destroyed
if subfunction 01h, process ID set to new program's PSP; get with
INT 21/AH=62h
CF set on error
AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
Notes: DOS 2.x destroys all registers, including SS:SP
under ROM-based DOS, if no disk path characters (colons or slashes)
are included in the program name, the name is searched for in the
ROM module headers (see below) before searching on disk
for functions 00h and 01h, the calling process must ensure that there
is enough unallocated memory available; if necessary, by releasing
memory with AH=49h or AH=4Ah
for function 01h, the AX value to be passed to the child program is put
on top of the child's stack
for function 03h, DOS assumes that the overlay is being loaded into
memory allocated by the caller
function 01h was undocumented prior to the release of DOS 5.0
some versions (such as DR-DOS 6.0) check the parameters and parameter
block and return an error if an invalid value (such as an offset of
FFFFh) is found
background programs under European MS-DOS 4.0 must use the new
executable format
new executables begin running with the following register values
AX = environment segment
BX = offset of command tail in environment segment
CX = size of automatic data segment (0000h = 64K)
ES,BP = 0000h
DS = automatic data segment
SS:SP = initial stack
the command tail corresponds to an old executable's PSP:0081h and
following, except that the 0Dh is turned into a NUL (00h); new
format executables have no PSP
under the FlashTek X-32 DOS extender, only function 00h is supported
and the pointers are passed in DS:EDX and ES:EBX
DR-DOS 6 always loads .EXE-format programs with no fixups above the
64K mark to avoid the EXEPACK bug
names for the various executable type understood by various
environments:
MZ old-style DOS executable
NE Windows or OS/2 1.x segmented ("new") executable
LE Windows virtual device driver (VxD) linear executable
LX variant of LE used in OS/2 2.x
W3 Windows WIN386.EXE file; a collection of LE files
PE Win32 (Windows NT and Win32s) portable executable based on
Unix COFF
BUGS: DOS 2.00 assumes that DS points at the current program's PSP
Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
file contains additional data after the actual overlay
SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
Format of EXEC parameter block for AL=00h,01h,04h:
Offset Size Description
00h WORD segment of environment to copy for child process (copy caller's
environment if 0000h)
02h DWORD pointer to command tail to be copied into child's PSP
06h DWORD pointer to first FCB to be copied into child's PSP
0Ah DWORD pointer to second FCB to be copied into child's PSP
0Eh DWORD (AL=01h) will hold subprogram's initial SS:SP on return
12h DWORD (AL=01h) will hold entry point (CS:IP) on return
Format of EXEC parameter block for AL=03h:
Offset Size Description
00h WORD segment at which to load overlay
02h WORD relocation factor to apply to overlay if in .EXE format
Format of EXEC parameter block for FlashTek X-32:
Offset Size Description
00h PWORD 48-bit far pointer to environment string
06h PWORD 48-bit far pointer to command tail string
Format of .EXE file header:
Offset Size Description
00h 2 BYTEs .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
02h WORD number of bytes in last 512-byte page of executable
04h WORD total number of 512-byte pages in executable (includes any
partial last page)
06h WORD number of relocation entries
08h WORD header size in paragraphs
0Ah WORD minimum paragraphs of memory to allocation in addition to
executable's size
0Ch WORD maximum paragraphs to allocate in addition to executable's size
0Eh WORD initial SS relative to start of executable
10h WORD initial SP
12h WORD checksum (one's complement of sum of all words in executable)
14h DWORD initial CS:IP relative to start of executable
18h WORD offset within header of relocation table
40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
1Ah WORD overlay number (normally 0000h = main program)
---new executable---
1Ch 4 BYTEs ???
20h WORD behavior bits
22h 26 BYTEs reserved for additional behavior info
3Ch DWORD offset of new executable (NE,LE,etc) header within disk file,
or 00000000h if plain MZ executable
---Borland TLINK---
1Ch 2 BYTEs ??? (apparently always 01h 00h)
1Eh BYTE signature FBh
1Fh BYTE TLINK version (major in high nybble, minor in low nybble)
20h 2 BYTEs ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
---ARJ self-extracting archive---
1Ch 4 BYTEs signature "RJSX" (older versions, new signature is "aRJsfX" in
the first 1000 bytes of the file)
---LZEXE 0.90 compressed executable---
1Ch 4 BYTEs signature "LZ09"
---LZEXE 0.91 compressed executable---
1Ch 4 BYTEs signature "LZ91"
---PKLITE compressed executable---
1Ch BYTE minor version number
1Dh BYTE bits 0-3: major version
bit 4: extra compression
bit 5: huge (multi-segment) file
1Eh 6 BYTEs signature "PKLITE" (followed by copyright message)
---LHarc 1.x self-extracting archive---
1Ch 4 BYTEs unused???
20h 3 BYTEs jump to start of extraction code
23h 2 BYTEs ???
25h 12 BYTEs signature "LHarc's SFX "
---LHA 2.x self-extracting archive---
1Ch 8 BYTEs ???
24h 10 BYTEs signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
---TopSpeed C 3.0 CRUNCH compressed file---
1Ch DWORD 018A0001h
20h WORD 1565h
---PKARCK 3.5 self-extracting archive---
1Ch DWORD 00020001h
20h WORD 0700h
---BSA (Soviet archiver) self-extracting archive---
1Ch WORD 000Fh
1Eh BYTE A7h
---LARC self-extracting archive---
1Ch 4 BYTEs ???
20h 11 BYTEs "SFX by LARC "
---LH self-extracting archive---
1Ch 8 BYTEs ???
24h 8 BYTEs "LH's SFX "
---other linkers---
1Ch var optional information
---
N N DWORDs relocation items
Notes: if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
versions of the MS linker set it that way
if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
program is loaded as high in memory as possible
the maximum allocation is set to FFFFh by default
Format of ROM Module Header:
Offset Size Description
00h 2 BYTEs ROM signature 55h, AAh
02h BYTE size of ROM in 512-byte blocks
03h 3 BYTEs POST initialization entry point (near JMP instruction)
06h ROM Program Name List [array]
Offset Size Description
00h BYTE length of ROM program's name (00h if end of name list)
01h N BYTEs program name
N+1 3 BYTEs program entry point (near JMP instruction)
Format of new executable header:
Offset Size Description
00h 2 BYTEs "NE" (4Eh 45h) signature
02h 2 BYTEs linker version (major, then minor)
04h WORD offset from start of this header to entry table (see below)
06h WORD length of entry table in bytes
08h DWORD file load CRC (0 in Borland's TPW)
0Ch BYTE program flags
bits 0-1 DGROUP type
0 = none
1 = single shared
2 = multiple (unshared)
3 = (null)
bit 2: global initialization
bit 3: protected mode only
bit 4: 8086 instructions
bit 5: 80286 instructions
bit 6: 80386 instructions
bit 7: 80x87 instructions
0Dh BYTE application flags
bits 0-2: application type
001 full screen (not aware of Windows/P.M. API)
010 compatible with Windows/P.M. API
011 uses Windows/P.M. API
bit 3: is a Family Application (OS/2)
bit 5: 0=executable, 1=errors in image
bit 6: non-conforming program (valid stack is not maintained)
bit 7: DLL or driver rather than application
(SS:SP info invalid, CS:IP points at FAR init routine
called with AX=module handle which returns AX=0000h
on failure, AX nonzero on successful initialization)
0Eh WORD auto data segment index
10h WORD initial local heap size
12h WORD initial stack size (added to data seg, 0000h if SS <> DS)
14h DWORD program entry point (CS:IP), "CS" is index into segment table
18h DWORD initial stack pointer (SS:SP), "SS" is segment index
if SS=automatic data segment and SP=0000h, the stack pointer is
set to the top of the automatic data segment, just below the
local heap
1Ch WORD segment count
1Eh WORD module reference count
20h WORD length of nonresident names table in bytes
22h WORD offset from start of this header to segment table (see below)
24h WORD offset from start of this header to resource table
26h WORD offset from start of this header to resident names table
28h WORD offset from start of this header to module reference table
2Ah WORD offset from start of this header to imported names table
(array of counted strings, terminated with a string of length
00h)
2Ch DWORD offset from start of file to nonresident names table
30h WORD count of moveable entry point listed in entry table
32h WORD file alignment size shift count
0 is equivalent to 9 (default 512-byte pages)
34h WORD number of resource table entries
36h BYTE target operating system
00h unknown
01h OS/2
02h Windows
03h European MS-DOS 4.x
04h Windows 386
05h BOSS (Borland Operating System Services)
37h BYTE other EXE flags
bit 0: supports long filenames
bit 1: 2.X protected mode
bit 2: 2.X proportional font
bit 3: gangload area
38h WORD offset to return thunks or start of gangload area
3Ah WORD offset to segment reference thunks or length of gangload area
3Ch WORD minimum code swap area size
3Eh 2 BYTEs expected Windows version (minor version first)
Note: this header is documented in detail in the Windows 3.1 SDK Programmer's
Reference, Vol 4.
(The rest of the INT 21 AH = 4Bh was deleted from this table, see the entry
in the List for info)